home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
passwrd4.arc
/
LOCK.ASM
next >
Wrap
Assembly Source File
|
1985-04-30
|
8KB
|
192 lines
PAGE 60,132
TITLE LOCK V1.2 - RECALLS PASSWORD DEVICE DRIVER CODE
;-----------------------------------------------------------------------
; LOCK V1.2
;
; LOCK IS DESIGNED TO WORK IN CONJUNCTION WITH PASSWRD4.SYS.
; ITS PURPOSE IT TO CALL A PORTION OF CODE INTERNAL TO THE
; DEVICE DRIVER PASSWRD4.SYS. THIS WILL ENABLE A USER TO "LOCK"
; THE PC UNTIL A USER REPLIES WITH THE CORRECT PASSWORD.
; ** CAUTION BEWARE OF UPPER CASE VS LOWER CASE WHEN RESPONDING **
;
; THIS CODE WILL CHECK THE INTERUPT VECTOR 66h FOR A NON ZERO SEGMENT
; REFERENCE BEFORE CALLING THE PASSWORD ROUTINE. PASSWRD4.SYS WILL
; INITIALIZE THIS INTERUPT A BOOT TIME. SINCE THE PASSWRD4.SYS
; DEVICE DRIVER, LIKE ANY DEVICE DRIVER, REMAINS RESIDENT THE USER
; IS ASSURED THAT HE ONLY NEED CHANGE PASSWRD4.SYS IN ORDER TO
; CHANGE THE SYSTEM PASSWRD.
;
; JOHN R. PETROCELLI
; 02/25/85
; REV 04/30/85
;
;----------------------------------------------------------------------
;
INT_VECTORS SEGMENT AT 0H ; POINT TO INTERUPT VECTOR TABLE
ORG 66H*4 ; INT 66H
ASK_OFF DW ; OFFSET OF PASSWORD RECALL
ASK_SEG DW ; SEGMENT OF PASSWORD RECALL
INT_VECTORS ENDS
CODE_SEG SEGMENT PARA 'CODE'
ASSUME CS:CODE_SEG, DS:CODE_SEG, ES:INT_VECTORS, SS:NOTHING
ORG 100H ; NEEDED FOR A .COM PROGRAM
BEGIN:
PUSH DS ; SAVE REGISTERS FOR
PUSH ES ; GOOD HOUSKEEPING (NO PUN
PUSH AX ; INTENDED)
PUSH BX ;
PUSH DX ;
MOV AX,0 ; SET ES TO REFERENCE
MOV ES,AX ; INT_VECTORS
MOV AX,CS ; SET DS TO REFERENCE
MOV DS,AX ; CODE_SEG
;=======================================================================
; THE FOLLOWINT 8 LINES RESET INT 09h TO POINT TO A PORTION OF THIS
; CODE(SEE BELOW) IN ORDER TO ELIMINATE CTRL STYLE KEYSTROKES
;=======================================================================
CLI ; INTERUPTS OFF
MOV AX,WORD PTR ES:[09h*4] ; INT 09h OFFSET INTO AX
MOV KBINT_OFF,AX ; SAVE IT FOR RECALL
MOV AX,WORD PTR ES:[09h*4+2] ; INT 09h SEG INTO AX
MOV KBINT_SEG,AX ; SAVE IT FOR RECALL
MOV WORD PTR ES:[09h*4],OFFSET CTL_ENTRY ; NEW INT 09h OFFSET
MOV WORD PTR ES:[09h*4+2],CS ; NEW INT 09h SEG
STI ; INTERUPTS ON
;=======================================================================
LEA BX,ASK_OFF ; SET ES:BX TO POINT TO
; LOCATION IN THE INT VECTOR
; TABLE CONTAINING SEG & OFFSET
; OF PASSWORD RECALL ROUTINE
MOV AX,ES:[BX+2] ; LOAD AX WITH SEGMENT OF CALL
CMP AX,0 ; AND IF THE SEGMENT IS 0 THEN
JZ ERROR_EXIT ; EXIT - NOT INITIALIZED
CALL DWORD PTR ES:[BX] ; CALL PWORD IF INSTALLED
; ES:BX WILL POINT TO THE ADDRESS
; OF THE ROUTINE TO BE CALLED
EXIT:
;=======================================================================
; THE FOLLOWING 8 LINES RESET INT 09h TO ITS ORIGINAL SEGMENT AND OFFSET
; AS IT WAS UPON ENTRY TO THIS ROUTINE
;=======================================================================
CLI ; INTERUPTS OFF
MOV AX,0 ; LOAD AX WITH SEGMENT OF INTERUPTS
MOV ES,AX ; AND MAKE ES POINT TO IT
MOV AX,KBINT_OFF ; LOAD AX WITH ORIGINAL INT 09h OFFS
MOV WORD PTR ES:[09h*4],AX ; RESTORE ORIGINAL INT 09h OFFSET
MOV AX,KBINT_SEG ; LOAD AX WITH ORIGINAL INT 09h SEG
MOV WORD PTR ES:[09h*4+2],AX ; RESTORE ORIGINAL INT 09h SEG
STI ; INTERUPTS ON
;=======================================================================
POP DX ; RESTORE REGISTERS FOR
POP BX ; GOOD HOUSKEEPING (NO PUN
POP AX ; INTENDED)
POP ES ;
POP DS ;
RET ; RETURN TO DOS
ERROR_EXIT: ; SEGMENT AND/OR OFFSET
; WERE 0000 SO WE DON'T CALL
; JUST PRINT ERROR MESSAGE
MOV DX,OFFSET NO_INIT ; DS:DX POINTS TO ERROR MSG
MOV AX,0900H ; SET UP AX TO PRINT DS:DX
INT 21H ; PRINT ERROR MSG
JMP EXIT ; RETURN TO DOS
NOP ; PAD
NOP ; PAD
NOP ; PAD
CTL_ENTRY:
NOP
STI ; RESET INTERRUPTS
PUSH DS ; SAVE SYSTEM(OTHERWISE IT MAY
PUSH ES ; BECOME AN ENDANGERED SPECIES!)
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
MOV SI,CS ; GET SEGMENT VALUE
MOV DS,SI ; INTO DATA SEGMENT
MOV ES,SI ; AND EXTRA
IN AL,060H ; READ KEYBOARD INPUT
TEST AL,080H ; SEE IF KEY RELEASE
JNZ CTL_EXIT ; YES, IGNORE RELEASES
CMP AL,01DH ; SEE IF CTRL KEY DEPRESSED
JNZ CTL_EXIT ; NO, GO TO NORMAL HANDLING
; KEY WE WANT, RESET KEYBOARD
; PORT TO ACKNOWLEDGE RECEIPT
; OF KEYSTROKE INFO
IN AL,061H ; READ 8255 PORT
OR AL,080H ; SET ACKNOWLEDGE SIGNAL BIT
OUT 061H,AL ; SEND ACKNOWLEDGE TO PORT
AND AL,07FH ; RESET ACKNOWLEDGE BIT
OUT 061H,AL ; RESTORE ORIGINAL 8255 PORT STATUS
MOV AL,020H ; SEND EOI TO 8259 COMMAND REG
OUT 020H,AL
POP BP
POP DI ; RESTORE
POP SI
POP DX
POP CX
POP BX
POP AX
POP ES
POP DS
IRET ; RETURN FROM INTERRUPT
CTL_EXIT: ; HANDLE KEYSTROKE NORMALLY,
POP BP ; JUMP TO REGULAR KEYBOARD HANDLER
POP DI
POP SI ; RESTORE REGISTERS
POP DX
POP CX
POP BX
POP AX ; JUMP TO REGULAR KEYBOARD ROUTINE
POP ES
POP DS
;
DB 0EAH ; THIS PRODUCES FAR JUMP TO BELOW
;
KBINT_OFF DW 0 ; STORE OLD KEYBOARD INT ADDRESS
KBINT_SEG DW 0
NO_INIT DB 1BH,'[5m', ; MAKE "PASSWORD" BLINK
DB ' PASSWORD '
DB 1BH,'[0m' ; ATTRIBUTES TO NORMAL
DB ' Device Driver Does Not'
DB ' Appear To Be Installed'
DB 07H,0DH,0AH,'$' ; BEEP+CR+LF
CODE_SEG ENDS
END BEGIN